/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cliente.negocio;

import cliente.comunicacion.Cliente;
import cliente.comunicacion.ICliente;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import javax.swing.JOptionPane;


import server.dominio.ISesion;


/**
 *
 * @author tpaxle
 */
public class Administrador_Cliente implements Serializable{
    private Controlador_Login C_Login;
    private Controlador_Log C_log;
    private Controlador_Citador C_Citador;
    private Controlador_Administrador C_Adminb;
    private Notificador C_notificador;
    private ICliente cliente;
    private ISesion sesion;
    private int rol=-1;
    private Controlador_GestionMedico C_G_Medico;
    public Administrador_Cliente(ICliente cliente) {
        C_log= new Controlador_Log();
        C_Login= new Controlador_Login(this);
        this.cliente=  cliente;
        C_notificador= new Notificador(this);

    }

    public void logincorrecto(ISesion sesion) throws Exception {
        try {
            Cliente cliente_aux= (Cliente)cliente;
            C_log.escribir("Login correcto.\n\tSesion_id: " + sesion.getId() + "\n\tSesion_rol: "+ sesion.getRol());
            //se procede a resgistrar
            //Activamos el servicio rmi cliente
            this.activaryregistrar(cliente_aux, sesion.getId());
            C_log.escribir("Cliente +"+ sesion.getId()+" registrado en el servidor");
            this.sesion= sesion;
            analizarsesion();
        } catch (RemoteException ex) {
            C_log.escribir("Error: "+ ex.toString());
        } catch (MalformedURLException ex) {
            C_log.escribir("Error: "+ ex.toString());
        }
    }

    public void log(String mensaje){
         C_log.escribir(mensaje);
    }


    private void activaryregistrar(Cliente cliente_aux, long idSesion) throws RemoteException, MalformedURLException, Exception{
//            cliente_aux.activarservicio();
            C_log.escribir("Servicio Cliente activado");
            C_Login.registrar(cliente_aux, idSesion);
    }
    private void analizarsesion(){
        switch((int)sesion.getRol()){
            case 1:
                C_log.escribir("Eres un administrador macho...");
                //C_Citador = new Controlador_Citador(this, tr);
                C_Login.cerrar();
//                C_Admin= new Controlador_Administrador(this, sesion.getId());
                C_Adminb= new Controlador_Administrador(sesion.getId(), this);
          //      C_Admin = new Controlador_Administrador(this, C_Citador);
                rol= 1;
 
                break;
            case 2:
                C_Login.cerrar();
                C_Citador= new Controlador_Citador(sesion.getId(), this);
                break;
            case 3:
                C_G_Medico= new Controlador_GestionMedico(sesion.getId(), this);
                C_log.escribir("Eres un Medico macho...");
                break;

        }
    }


    public void entregarUsuariosrecibidos(ArrayList<Object> usuarios, ArrayList<Object> beneficiarios) {
          C_Adminb.getControladoractual().entregarUsuariosrecibidos(usuarios, beneficiarios);
    }

    public void entregarCentros(ArrayList<Object> centros) {
        C_Adminb.getControladoractual().entregarCentros(centros);
    }



    public ISesion getSesion() {
        return sesion;
    }

    public void notificar(int noperacion, Object d) {
        C_notificador.notificar(noperacion, d);
    }

    public Controlador_Administrador getC_Admin() {
        return C_Adminb;
    }

    public void entregarMedicos(ArrayList<Object> medicos) {
        C_Adminb.getControladoractual().entregarMedicos(medicos);
    }

    public void entregarHorario(ArrayList<Object> lhora) {
        if(rol==1){
            C_Adminb.getControladoractual().entregarHorario(lhora);
        }
    }

    public void cerrar() {
        C_Login= new Controlador_Login(this);
    }

    public void expularsesion() {
        JOptionPane.showMessageDialog(null, "Usted se ha logueado en otro equipo. A continuación la aplicación se cerrara", "Error Login", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
    }


}
